package dreamdancetiktokmodelmysql

import (
	"database/sql/driver"
	"encoding/json"
	"gorm.io/gorm"
	"time"
)

// 后台平台菜单表
type DanceElement struct {
	Id                int64          `gorm:"primaryKey;autoIncrement;comment:id" json:"id"`
	Icon              string         `json:"icon" gorm:"column:icon;type:varchar(256);not null;default:'';comment:缩略图地址"`                                                                // 缩略图地址
	No                string         `json:"no" gorm:"column:no;type:varchar(256);not null;default:'';comment:元素编号-参考 10465705，运营人员录入的"`                                                 // 元素编号-参考 10465705，运营人员录入的
	FileNo            string         `json:"fileNo" gorm:"column:file_no;type:varchar(256);not null;default:'';comment:元素编号-参考 10465705，运营人员录入的"`                                        // 元素编号-参考 10465705，运营人员录入的
	Name              string         `json:"name" gorm:"column:name;type:varchar(256);not null;default:'';comment:元素名字-运营人员填写"`                                                          // 元素名字-运营人员填写
	ElementLocal      string         `json:"elementLocal" gorm:"column:element_local;type:varchar(256);not null;default:'';comment:1:头发;2:脸;5:上半身;6:下半身;8:鞋子,11:左手持,12:右手持,14:头顶,15：背后"` // 元素名字-运营人员填写
	Sex               int            `json:"sex" gorm:"column:sex;type:tinyint;default:0;not null;comment:是否缓存 0男 1女"`                                                                   // 是否缓存 0否 1是
	EleType           int64          `json:"eleType" gorm:"column:ele_type;type:bigint;default:0;not null;comment:一级类型"`                                                                 // 是否缓存 0否 1是
	ElePart           int64          `json:"elePart" gorm:"column:ele_part;type:bigint;default:0;not null;comment:二级类型"`
	EleTag            string         `json:"eleTag" gorm:"column:ele_tag;type:varchar(256);not null;default:'';comment:标签"` // 道具品级 s级有自己的分解系数
	Quality           int64          `json:"quality" gorm:"column:quality;type:bigint;default:0;not null;comment:品质"`
	EleGene           string         `json:"eleGene" gorm:"column:ele_gene;type:varchar(256);not null;default:'';comment:基因-额外附加解析内容"`
	ElePrivate        int64          `json:"elePrivate" gorm:"column:ele_private;type:bigint;default:0;not null;comment:私有共有区分"`
	Presented         int64          `json:"presented" gorm:"column:presented;type:bigint;default:0;not null;comment:是否可以赠送"`                       // 0:可以赠送，1:不可赠送 是否可以赠送
	CanDecompose      int            `json:"can_decompose" gorm:"column:can_decompose;type:tinyint;default:0;not null;comment:是否可以分解: 0=不可以, 1=可以"` //是否可以分解: 0=不可以, 1=可以
	DecompositionBase int64          `json:"decompositionBase" gorm:"column:decomposition_base;type:bigint;default:0;not null;comment:分解基数"`        // 分解基数
	CreateId          int64          `json:"create_id" gorm:"column:create_id;type:bigint;default:0;not null;comment:创建人id"`                        // 创建人id
	UpdateId          int64          `json:"update_id" gorm:"column:update_id;type:bigint;default:0;not null;comment:更新人id"`                        // 更新人id
	CreatedAt         time.Time      `json:"created_at" gorm:"column:created_at;type:datetime"`
	UpdatedAt         time.Time      `json:"updated_at" gorm:"column:updated_at;type:datetime"`
	DeletedAt         gorm.DeletedAt `gorm:"index;type:datetime" json:"-"`
}

// IsPresented 是否可以赠送
func (d *DanceElement) IsPresented() bool {
	return d.Presented == 0
}

// IsCanDecompose 是否可以分解
func (d *DanceElement) IsCanDecompose() bool {
	return d.CanDecompose == 1 && d.IsPresented() && d.DecompositionBase > 0
}

//type ElementLocalList []*ElementLocal

type ElementLocal struct {
	Code             int    `json:"code"`
	ElementLocalName string `json:"ElementLocalName"`
}

func (c ElementLocal) Value() (driver.Value, error) {
	b, err := json.Marshal(c)
	return string(b), err
}

func (c *ElementLocal) Scan(input interface{}) error {
	return json.Unmarshal(input.([]byte), c)
}
